package com.tedu.api.io;

import java.io.*;
import java.util.Scanner;

/**
 * 练习：做一个笔记本程序
 * 需求：程序开始后，要求客户输入文件名，在控制台输入。假设：a.txt
 *      然后针对文件【a.txt】进行读写操作，用户一行行输入文本【控制台】，
 *      保存a.txt文件中
 *      用户可以一直输入文件，直到用户输入“退出或者exit”程序结束
 *      保存a.txt生成在 API 项目下
 *
 */
public class Note {
    //主方法：直接写文件  相对路径a.txt   根级路径，如果想指定在api下生成
    public static void main(String[] args) {
        FileOutputStream fos=null;
        OutputStreamWriter osw=null;
        BufferedWriter bw=null;
        PrintWriter pw=null;
        //1.创建了一个扫描器--控制台--用户输入：文件名
        //扫描器类---功能：控制台卡住---等待用户输入：文本
        try {
            Scanner input=new Scanner(System.in);
            System.out.println("请输入文件名：");
            //nextLine() 获取从控制台输入一行文本内容
            String text=input.nextLine();
            //System.out.println(text);
            //2.控制台输入文件名---通过输出流写出--一行一行【高级流】
            fos=new FileOutputStream("API"+ File.separator+text);
            //高级流--转换流：指定编码集--缓冲流：高效--字符输出流
            osw=new OutputStreamWriter(fos,"UTF8");
            //高级流：缓冲流，功能：提高效率
            bw=new BufferedWriter(osw);
            pw=new PrintWriter(bw);
            //3.控制台输入：文本内容--对每行文本内容写出
            System.out.println("请开始输入内容【exit/退出】：");
            //3.1用户---一直输输入：直到用户输入"【exit"】退出"结束程序。
            String line=null;//先定义 死循环 --  先定义 死循环外 --①赋值②减少内存开销
            while (true){
                line=input.nextLine();//从控制台货期一行文本
                // 控制台输入文本--判断如果文本：exit或者【退出】
                if(line.equals("退出")||line.equals("exit")){
                    break;//打断--程序跳出
                }
                //写出line文本
                pw.println(line);
            }
            System.out.println("拜拜~~~");
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            pw.close();
        }
        //关闭高级流---缓冲字符流：【缓冲区】关闭流--调用flush
        //针对传输：文本
    }
}
